Return a GdkPixbufLoader, not a GtkObject.
authorFederico Mena Quintero <federico@redhat.com>
Wed, 27 Oct 1999 17:31:07 +0000 (17:31 +0000)
committerArturo Espinosa <unammx@src.gnome.org>
Wed, 27 Oct 1999 17:31:07 +0000 (17:31 +0000)
1999-10-27  Federico Mena Quintero  <federico@redhat.com>

* src/gdk-pixbuf-loader.c (gdk_pixbuf_loader_new): Return a
GdkPixbufLoader, not a GtkObject.
(gtk_marshal_NONE__INT_INT_INT_INT): Made static.
(gdk_pixbuf_loader_get_type): Documented.
(gdk_pixbuf_loader_class_init): Initialize the parent class
correctly.
(gdk_pixbuf_loader_destroy): Added sanity checks. Call the parent
class destroy function.
(gdk_pixbuf_loader_new): Documented.
(gdk_pixbuf_loader_finalize): Call the parent class finalize
function.
(gdk_pixbuf_loader_write): Use size_t for count.

gdk-pixbuf/ChangeLog
gdk-pixbuf/gdk-pixbuf-io.h
gdk-pixbuf/gdk-pixbuf-loader.c
gdk-pixbuf/gdk-pixbuf-loader.h
gdk-pixbuf/gnome-canvas-pixbuf.c
gtk/gdk-pixbuf-loader.c
gtk/gdk-pixbuf-loader.h

index 80039d02ddd46dc5c190d20087a8f93311944610..c06d221125e82e058f9f249ae8128443d5c466c8 100644 (file)
@@ -1,3 +1,18 @@
+1999-10-27  Federico Mena Quintero  <federico@redhat.com>
+
+       * src/gdk-pixbuf-loader.c (gdk_pixbuf_loader_new): Return a
+       GdkPixbufLoader, not a GtkObject.
+       (gtk_marshal_NONE__INT_INT_INT_INT): Made static.
+       (gdk_pixbuf_loader_get_type): Documented.
+       (gdk_pixbuf_loader_class_init): Initialize the parent class
+       correctly.
+       (gdk_pixbuf_loader_destroy): Added sanity checks. Call the parent
+       class destroy function.
+       (gdk_pixbuf_loader_new): Documented.
+       (gdk_pixbuf_loader_finalize): Call the parent class finalize
+       function.
+       (gdk_pixbuf_loader_write): Use size_t for count.
+
 1999-10-27  Michael Fulbright  <msf@avatar.labs.redhat.com>
 
        * src/gdk-pixbuf-loader.c (gdk_pixbuf_loader_destroy): Fixed
index e27c137a59ddf8ce45168a3b3363291f869896ce..b3da91d6455d3a1489a4e8f513d44e69f81f893d 100644 (file)
 #include "gdk-pixbuf.h"
 #include <stdio.h>
 
+\f
+
 typedef void (* ModulePreparedNotifyFunc) (GdkPixbuf *pixbuf, gpointer user_data);
 
 typedef struct _ModuleType ModuleType;
 struct _ModuleType {
        char *module_name;
-       gboolean (* format_check) (guchar *buffer, int size);
        GModule *module;
+       gboolean (* format_check) (guchar *buffer, int size);
        GdkPixbuf *(* load) (FILE *f);
         GdkPixbuf *(* load_xpm_data) (const gchar **data);
 
index a86736e0e919322f75fb6dd35a476005420df5fe..2a9ac9e3e4b3fee480267e473cac202f2443e962 100644 (file)
@@ -27,6 +27,8 @@
 #include "gdk-pixbuf-io.h"
 #include <gtk/gtksignal.h>
 
+\f
+
 enum {
        AREA_UPDATED,
        AREA_PREPARED,
@@ -41,44 +43,52 @@ static void gdk_pixbuf_loader_init          (GdkPixbufLoader        *loader);
 static void gdk_pixbuf_loader_destroy       (GtkObject              *loader);
 static void gdk_pixbuf_loader_finalize      (GtkObject              *loader);
 
+static guint pixbuf_loader_signals[LAST_SIGNAL] = { 0 };
+
+\f
 
 /* Internal data */
-typedef struct _GdkPixbufLoaderPrivate GdkPixbufLoaderPrivate;
-struct _GdkPixbufLoaderPrivate
-{
+typedef struct {
        GdkPixbuf *pixbuf;
        gboolean closed;
        gchar buf[128];
        gint buf_offset;
        ModuleType *image_module;
        gpointer context;
-};
-static guint pixbuf_loader_signals[LAST_SIGNAL] = { 0 };
+} GdkPixbufLoaderPrivate;
 
+\f
 
 /* our marshaller */
-typedef void (*GtkSignal_NONE__INT_INT_INT_INT) (GtkObject * object,
-                                                        gint arg1,
-                                                        gint arg2,
-                                                        gint arg3,
-                                                        gint arg4,
-                                                        gpointer user_data);
-void
-gtk_marshal_NONE__INT_INT_INT_INT (GtkObject * object,
-                                  GtkSignalFunc func,
-                                  gpointer func_data,
+typedef void (* GtkSignal_NONE__INT_INT_INT_INT) (GtkObject *object,
+                                                 gint arg1, gint arg2, gint arg3, gint arg4,
+                                                 gpointer user_data);
+static void
+gtk_marshal_NONE__INT_INT_INT_INT (GtkObject *object, GtkSignalFunc func, gpointer func_data,
                                   GtkArg * args)
 {
-  GtkSignal_NONE__INT_INT_INT_INT rfunc;
-  rfunc = (GtkSignal_NONE__INT_INT_INT_INT) func;
-  (*rfunc) (object,
-           GTK_VALUE_INT (args[0]),
-           GTK_VALUE_INT (args[1]),
-           GTK_VALUE_INT (args[2]),
-           GTK_VALUE_INT (args[3]),
-           func_data);
+       GtkSignal_NONE__INT_INT_INT_INT rfunc;
+
+       rfunc = (GtkSignal_NONE__INT_INT_INT_INT) func;
+       (*rfunc) (object,
+                 GTK_VALUE_INT (args[0]),
+                 GTK_VALUE_INT (args[1]),
+                 GTK_VALUE_INT (args[2]),
+                 GTK_VALUE_INT (args[3]),
+                 func_data);
 }
 
+\f
+
+/**
+ * gdk_pixbuf_loader_get_type:
+ * @void: 
+ * 
+ * Registers the &GdkPixubfLoader class if necessary, and returns the type ID
+ * associated to it.
+ * 
+ * Return value: The type ID of the &GdkPixbufLoader class.
+ **/
 GtkType
 gdk_pixbuf_loader_get_type (void)
 {
@@ -103,9 +113,13 @@ gdk_pixbuf_loader_get_type (void)
 }
 
 static void
-gdk_pixbuf_loader_class_init (GdkPixbufLoaderClass *klass)
+gdk_pixbuf_loader_class_init (GdkPixbufLoaderClass *class)
 {
-       parent_class = GTK_OBJECT_CLASS (klass);
+       GtkObjectClass *object_class;
+
+       object_class = (GtkObjectClass *) class;
+
+       parent_class = gtk_type_class (gtk_object_get_type ());
 
        pixbuf_loader_signals[AREA_PREPARED] =
                gtk_signal_new ("area_prepared",
@@ -121,7 +135,11 @@ gdk_pixbuf_loader_class_init (GdkPixbufLoaderClass *klass)
                                parent_class->type,
                                GTK_SIGNAL_OFFSET (GdkPixbufLoaderClass, area_updated),
                                gtk_marshal_NONE__INT_INT_INT_INT,
-                               GTK_TYPE_NONE, 4, GTK_TYPE_INT, GTK_TYPE_INT, GTK_TYPE_INT, GTK_TYPE_INT);
+                               GTK_TYPE_NONE, 4,
+                               GTK_TYPE_INT,
+                               GTK_TYPE_INT,
+                               GTK_TYPE_INT,
+                               GTK_TYPE_INT);
 
        pixbuf_loader_signals[CLOSED] =
                gtk_signal_new ("closed",
@@ -131,10 +149,10 @@ gdk_pixbuf_loader_class_init (GdkPixbufLoaderClass *klass)
                                gtk_marshal_NONE__NONE,
                                GTK_TYPE_NONE, 0);
 
-       gtk_object_class_add_signals (parent_class, pixbuf_loader_signals, LAST_SIGNAL);
+       gtk_object_class_add_signals (object_class, pixbuf_loader_signals, LAST_SIGNAL);
 
-       parent_class->destroy = gdk_pixbuf_loader_destroy;
-       parent_class->finalize = gdk_pixbuf_loader_finalize;
+       object_class->destroy = gdk_pixbuf_loader_destroy;
+       object_class->finalize = gdk_pixbuf_loader_finalize;
 }
 
 static void
@@ -142,13 +160,8 @@ gdk_pixbuf_loader_init (GdkPixbufLoader *loader)
 {
        GdkPixbufLoaderPrivate *priv;
 
-       priv = g_new (GdkPixbufLoaderPrivate, 1);
+       priv = g_new0 (GdkPixbufLoaderPrivate, 1);
        loader->private = priv;
-
-       priv->image_module=NULL;
-       priv->pixbuf = NULL;
-       priv->closed = FALSE;
-       priv->buf_offset = 0;
 }
 
 static void
@@ -156,14 +169,19 @@ gdk_pixbuf_loader_destroy (GtkObject *loader)
 {
        GdkPixbufLoaderPrivate *priv = NULL;
 
+       g_return_if_fail (loader != NULL);
+       g_return_if_fail (GDK_IS_PIXBUF_LOADER (loader));
+
        priv = GDK_PIXBUF_LOADER (loader)->private;
 
-       /* We want to close it if it's not already closed */
        if (!priv->closed)
                gdk_pixbuf_loader_close (GDK_PIXBUF_LOADER (loader));
 
        if (priv->pixbuf)
                gdk_pixbuf_unref (priv->pixbuf);
+
+       if (GTK_OBJECT_CLASS (parent_class)->destroy)
+               (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
 }
 
 static void
@@ -173,6 +191,9 @@ gdk_pixbuf_loader_finalize (GtkObject *loader)
 
        priv = GDK_PIXBUF_LOADER (loader)->private;
        g_free (priv);
+
+       if (GTK_OBJECT_CLASS (parent_class)->finalize)
+               (* GTK_OBJECT_CLASS (parent_class)->finalize) (object);
 }
 
 static void
@@ -188,20 +209,25 @@ gdk_pixbuf_loader_prepare (GdkPixbuf *pixbuf, gpointer loader)
        gtk_signal_emit (GTK_OBJECT (loader), pixbuf_loader_signals[AREA_PREPARED]);
 }
 
-/* Public functions */
-GtkObject *
+\f
+
+/**
+ * gdk_pixbuf_loader_new:
+ * @void: 
+ * 
+ * Creates a new pixbuf loader object.
+ * 
+ * Return value: A newly-created pixbuf loader.
+ **/
+GdkPixbufLoader *
 gdk_pixbuf_loader_new (void)
 {
-       GdkPixbufLoader *loader;
-
-       loader = gtk_type_new (gdk_pixbuf_loader_get_type ());
-
-       return GTK_OBJECT (loader);
+       return gtk_type_new (gdk_pixbuf_loader_get_type ());
 }
 
 /**
  * gdk_pixbuf_loader_write:
- * @loader: A loader.
+ * @loader: A pixbuf loader.
  * @buf: The image data.
  * @count: The length of @buf in bytes.
  *
@@ -213,7 +239,7 @@ gdk_pixbuf_loader_new (void)
  * cannot parse the buf.
  **/
 gboolean
-gdk_pixbuf_loader_write (GdkPixbufLoader *loader, gchar *buf, gint count)
+gdk_pixbuf_loader_write (GdkPixbufLoader *loader, guchar *buf, size_t count)
 {
        GdkPixbufLoaderPrivate *priv;
 
@@ -230,54 +256,59 @@ gdk_pixbuf_loader_write (GdkPixbufLoader *loader, gchar *buf, gint count)
        if (priv->image_module == NULL) {
                gboolean retval = TRUE;
 
-               g_print ("buf_offset:%d:\n", priv->buf_offset);
                memcpy (priv->buf + priv->buf_offset,
                        buf,
-                       (priv->buf_offset + count) > 128 ? 128 - priv->buf_offset : count);
-               if ((priv->buf_offset + count) >= 128) {
+                       (priv->buf_offset + count > 128) ? (128 - priv->buf_offset) : count);
+
+               if (priv->buf_offset + count >= 128) {
                        /* We have enough data to start doing something with the image */
                        priv->image_module = gdk_pixbuf_get_module (priv->buf, 128);
-                       if (priv->image_module == NULL) {
+                       if (priv->image_module == NULL)
                                return FALSE;
-                       } else if ((priv->image_module->begin_load == NULL) ||
-                                  (priv->image_module->stop_load == NULL) ||
-                                  (priv->image_module->load_increment == NULL)) {
-                               g_warning ("module %s does not support incremental loading.\n", priv->image_module->module_name);
+                       else if ((priv->image_module->begin_load == NULL) ||
+                                (priv->image_module->stop_load == NULL) ||
+                                (priv->image_module->load_increment == NULL)) {
+                               g_warning ("module %s does not support incremental loading.\n",
+                                          priv->image_module->module_name);
                                return FALSE;
                        } else {
-                               g_print ("module loaded: name is %s\n", priv->image_module->module_name);
-                               priv->context = (priv->image_module->begin_load) (gdk_pixbuf_loader_prepare, loader);
+                               priv->context = (*priv->image_module->begin_load) (
+                                       gdk_pixbuf_loader_prepare, loader);
 
                                 if (priv->context == NULL) {
                                         g_warning("Failed to begin progressive load");
                                         return FALSE;
                                 }
                                 
-                               retval = (priv->image_module->load_increment) (priv->context, priv->buf, 128);
+                               retval = (* priv->image_module->load_increment) (
+                                       priv->context, priv->buf, 128);
+
+                               /* if we had more then 128 bytes total, we want
+                                * to send the rest of the buffer.
+                                */
 
-                               /* if we had more then 128 bytes total, we want to send the rest of the buffer */
                                if (retval && (priv->buf_offset + count) >= 128) {
-                                       retval = (priv->image_module->load_increment) (priv->context,
-                                                                                      buf,
-                                                                                      count + priv->buf_offset - 128);
+                                       retval = (* priv->image_module->load_increment) (
+                                               priv->context,
+                                               buf,
+                                               count + priv->buf_offset - 128);
                                }
                        }
-               } else {
+               } else
                        priv->buf_offset += count;
-               }
+
                return retval;
        }
 
        if (priv->image_module->load_increment)
-               return (priv->image_module->load_increment) (priv->context,
-                                                            buf,
-                                                            count);
+               return (* priv->image_module->load_increment) (priv->context, buf, count);
+
        return (FALSE);
 }
 
 /**
  * gdk_pixbuf_loader_get_pixbuf:
- * @loader: A loader.
+ * @loader: A pixbuf loader.
  *
  * Gets the GdkPixbuf that the loader is currently loading.  If the loader
  * hasn't been enough data via gdk_pixbuf_loader_write, then NULL is returned.
@@ -295,6 +326,7 @@ gdk_pixbuf_loader_get_pixbuf (GdkPixbufLoader *loader)
 
        g_return_val_if_fail (loader != NULL, NULL);
        g_return_val_if_fail (GDK_IS_PIXBUF_LOADER (loader), NULL);
+
        priv = loader->private;
 
        return priv->pixbuf;
@@ -302,10 +334,9 @@ gdk_pixbuf_loader_get_pixbuf (GdkPixbufLoader *loader)
 
 /**
  * gdk_pixbuf_loader_close:
- * @loader: A loader.
- *
- * Tells the loader to stop accepting writes
+ * @loader: A pixbuf loader.
  *
+ * Tells the loader to stop accepting writes.
  **/
 void
 gdk_pixbuf_loader_close (GdkPixbufLoader *loader)
@@ -325,20 +356,21 @@ gdk_pixbuf_loader_close (GdkPixbufLoader *loader)
                priv->image_module = gdk_pixbuf_get_module (priv->buf, priv->buf_offset);
                if (priv->image_module &&
                    ((priv->image_module->begin_load == NULL) ||
-                    (priv->image_module->begin_load == NULL) ||
-                    (priv->image_module->begin_load == NULL) ||
-                    (priv->image_module->begin_load == NULL))) {
-                       g_warning ("module %s does not support incremental loading.\n", priv->image_module->module_name);
+                    (priv->image_module->stop_load == NULL) ||
+                    (priv->image_module->load_increment == NULL))) {
+                       g_warning ("module %s does not support incremental loading.\n",
+                                  priv->image_module->module_name);
                } else if (priv->image_module) {
                        g_print ("module loaded: name is %s\n", priv->image_module->module_name);
-                       priv->context = (priv->image_module->begin_load) (gdk_pixbuf_loader_prepare, loader);
-                       (priv->image_module->load_increment) (priv->context, priv->buf, priv->buf_offset);
+                       priv->context = (* priv->image_module->begin_load) (
+                               gdk_pixbuf_loader_prepare, loader);
+                       (* priv->image_module->load_increment) (priv->context,
+                                                               priv->buf, priv->buf_offset);
                }
        }
 
        if (priv->image_module && priv->image_module->stop_load)
-               (priv->image_module->stop_load) (priv->context);
+               (priv->image_module->stop_load) (priv->context);
 
        priv->closed = TRUE;
 }
-
index 83dd9190634942834d256d52ce6c9999b20f7cf9..3e947ec0549df7f9d14ab8e6f3a414b4e5b3e4da 100644 (file)
@@ -66,11 +66,11 @@ struct _GdkPixbufLoaderClass {
 
 \f
 
-GtkType           gdk_pixbuf_loader_get_type (void);
-GtkObject *gdk_pixbuf_loader_new (void);
-gboolean   gdk_pixbuf_loader_write (GdkPixbufLoader *loader, gchar *buf, gint count);
+GtkType gdk_pixbuf_loader_get_type (void);
+GdkPixbufLoader *gdk_pixbuf_loader_new (void);
+gboolean gdk_pixbuf_loader_write (GdkPixbufLoader *loader, guchar *buf, size_t count);
 GdkPixbuf *gdk_pixbuf_loader_get_pixbuf (GdkPixbufLoader *loader);
-void       gdk_pixbuf_loader_close (GdkPixbufLoader *loader);
+void gdk_pixbuf_loader_close (GdkPixbufLoader *loader);
 
 \f
 
index 35eca7c808c8f9af26808c5eba89af60a228ee1f..90c9128c98372a7771faae2a4fd3d6f8de51d543 100644 (file)
@@ -607,6 +607,6 @@ gnome_canvas_pixbuf_draw (GnomeCanvasItem *item, GdkDrawable *drawable,
        art_affine_scale (scale, i_len, j_len);
        art_affine_multiply (final, i2c, scale);
 
-       buf = g_new0 (guchar, width * height * 3);
-       transform_pixbuf (buf, x, y, width, height, width * 3, priv->pixbuf, final);
+       buf = g_new0 (guchar, width * height * 4);
+       transform_pixbuf (buf, x, y, width, height, width * 4, priv->pixbuf, final);
 }
index a86736e0e919322f75fb6dd35a476005420df5fe..2a9ac9e3e4b3fee480267e473cac202f2443e962 100644 (file)
@@ -27,6 +27,8 @@
 #include "gdk-pixbuf-io.h"
 #include <gtk/gtksignal.h>
 
+\f
+
 enum {
        AREA_UPDATED,
        AREA_PREPARED,
@@ -41,44 +43,52 @@ static void gdk_pixbuf_loader_init          (GdkPixbufLoader        *loader);
 static void gdk_pixbuf_loader_destroy       (GtkObject              *loader);
 static void gdk_pixbuf_loader_finalize      (GtkObject              *loader);
 
+static guint pixbuf_loader_signals[LAST_SIGNAL] = { 0 };
+
+\f
 
 /* Internal data */
-typedef struct _GdkPixbufLoaderPrivate GdkPixbufLoaderPrivate;
-struct _GdkPixbufLoaderPrivate
-{
+typedef struct {
        GdkPixbuf *pixbuf;
        gboolean closed;
        gchar buf[128];
        gint buf_offset;
        ModuleType *image_module;
        gpointer context;
-};
-static guint pixbuf_loader_signals[LAST_SIGNAL] = { 0 };
+} GdkPixbufLoaderPrivate;
 
+\f
 
 /* our marshaller */
-typedef void (*GtkSignal_NONE__INT_INT_INT_INT) (GtkObject * object,
-                                                        gint arg1,
-                                                        gint arg2,
-                                                        gint arg3,
-                                                        gint arg4,
-                                                        gpointer user_data);
-void
-gtk_marshal_NONE__INT_INT_INT_INT (GtkObject * object,
-                                  GtkSignalFunc func,
-                                  gpointer func_data,
+typedef void (* GtkSignal_NONE__INT_INT_INT_INT) (GtkObject *object,
+                                                 gint arg1, gint arg2, gint arg3, gint arg4,
+                                                 gpointer user_data);
+static void
+gtk_marshal_NONE__INT_INT_INT_INT (GtkObject *object, GtkSignalFunc func, gpointer func_data,
                                   GtkArg * args)
 {
-  GtkSignal_NONE__INT_INT_INT_INT rfunc;
-  rfunc = (GtkSignal_NONE__INT_INT_INT_INT) func;
-  (*rfunc) (object,
-           GTK_VALUE_INT (args[0]),
-           GTK_VALUE_INT (args[1]),
-           GTK_VALUE_INT (args[2]),
-           GTK_VALUE_INT (args[3]),
-           func_data);
+       GtkSignal_NONE__INT_INT_INT_INT rfunc;
+
+       rfunc = (GtkSignal_NONE__INT_INT_INT_INT) func;
+       (*rfunc) (object,
+                 GTK_VALUE_INT (args[0]),
+                 GTK_VALUE_INT (args[1]),
+                 GTK_VALUE_INT (args[2]),
+                 GTK_VALUE_INT (args[3]),
+                 func_data);
 }
 
+\f
+
+/**
+ * gdk_pixbuf_loader_get_type:
+ * @void: 
+ * 
+ * Registers the &GdkPixubfLoader class if necessary, and returns the type ID
+ * associated to it.
+ * 
+ * Return value: The type ID of the &GdkPixbufLoader class.
+ **/
 GtkType
 gdk_pixbuf_loader_get_type (void)
 {
@@ -103,9 +113,13 @@ gdk_pixbuf_loader_get_type (void)
 }
 
 static void
-gdk_pixbuf_loader_class_init (GdkPixbufLoaderClass *klass)
+gdk_pixbuf_loader_class_init (GdkPixbufLoaderClass *class)
 {
-       parent_class = GTK_OBJECT_CLASS (klass);
+       GtkObjectClass *object_class;
+
+       object_class = (GtkObjectClass *) class;
+
+       parent_class = gtk_type_class (gtk_object_get_type ());
 
        pixbuf_loader_signals[AREA_PREPARED] =
                gtk_signal_new ("area_prepared",
@@ -121,7 +135,11 @@ gdk_pixbuf_loader_class_init (GdkPixbufLoaderClass *klass)
                                parent_class->type,
                                GTK_SIGNAL_OFFSET (GdkPixbufLoaderClass, area_updated),
                                gtk_marshal_NONE__INT_INT_INT_INT,
-                               GTK_TYPE_NONE, 4, GTK_TYPE_INT, GTK_TYPE_INT, GTK_TYPE_INT, GTK_TYPE_INT);
+                               GTK_TYPE_NONE, 4,
+                               GTK_TYPE_INT,
+                               GTK_TYPE_INT,
+                               GTK_TYPE_INT,
+                               GTK_TYPE_INT);
 
        pixbuf_loader_signals[CLOSED] =
                gtk_signal_new ("closed",
@@ -131,10 +149,10 @@ gdk_pixbuf_loader_class_init (GdkPixbufLoaderClass *klass)
                                gtk_marshal_NONE__NONE,
                                GTK_TYPE_NONE, 0);
 
-       gtk_object_class_add_signals (parent_class, pixbuf_loader_signals, LAST_SIGNAL);
+       gtk_object_class_add_signals (object_class, pixbuf_loader_signals, LAST_SIGNAL);
 
-       parent_class->destroy = gdk_pixbuf_loader_destroy;
-       parent_class->finalize = gdk_pixbuf_loader_finalize;
+       object_class->destroy = gdk_pixbuf_loader_destroy;
+       object_class->finalize = gdk_pixbuf_loader_finalize;
 }
 
 static void
@@ -142,13 +160,8 @@ gdk_pixbuf_loader_init (GdkPixbufLoader *loader)
 {
        GdkPixbufLoaderPrivate *priv;
 
-       priv = g_new (GdkPixbufLoaderPrivate, 1);
+       priv = g_new0 (GdkPixbufLoaderPrivate, 1);
        loader->private = priv;
-
-       priv->image_module=NULL;
-       priv->pixbuf = NULL;
-       priv->closed = FALSE;
-       priv->buf_offset = 0;
 }
 
 static void
@@ -156,14 +169,19 @@ gdk_pixbuf_loader_destroy (GtkObject *loader)
 {
        GdkPixbufLoaderPrivate *priv = NULL;
 
+       g_return_if_fail (loader != NULL);
+       g_return_if_fail (GDK_IS_PIXBUF_LOADER (loader));
+
        priv = GDK_PIXBUF_LOADER (loader)->private;
 
-       /* We want to close it if it's not already closed */
        if (!priv->closed)
                gdk_pixbuf_loader_close (GDK_PIXBUF_LOADER (loader));
 
        if (priv->pixbuf)
                gdk_pixbuf_unref (priv->pixbuf);
+
+       if (GTK_OBJECT_CLASS (parent_class)->destroy)
+               (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
 }
 
 static void
@@ -173,6 +191,9 @@ gdk_pixbuf_loader_finalize (GtkObject *loader)
 
        priv = GDK_PIXBUF_LOADER (loader)->private;
        g_free (priv);
+
+       if (GTK_OBJECT_CLASS (parent_class)->finalize)
+               (* GTK_OBJECT_CLASS (parent_class)->finalize) (object);
 }
 
 static void
@@ -188,20 +209,25 @@ gdk_pixbuf_loader_prepare (GdkPixbuf *pixbuf, gpointer loader)
        gtk_signal_emit (GTK_OBJECT (loader), pixbuf_loader_signals[AREA_PREPARED]);
 }
 
-/* Public functions */
-GtkObject *
+\f
+
+/**
+ * gdk_pixbuf_loader_new:
+ * @void: 
+ * 
+ * Creates a new pixbuf loader object.
+ * 
+ * Return value: A newly-created pixbuf loader.
+ **/
+GdkPixbufLoader *
 gdk_pixbuf_loader_new (void)
 {
-       GdkPixbufLoader *loader;
-
-       loader = gtk_type_new (gdk_pixbuf_loader_get_type ());
-
-       return GTK_OBJECT (loader);
+       return gtk_type_new (gdk_pixbuf_loader_get_type ());
 }
 
 /**
  * gdk_pixbuf_loader_write:
- * @loader: A loader.
+ * @loader: A pixbuf loader.
  * @buf: The image data.
  * @count: The length of @buf in bytes.
  *
@@ -213,7 +239,7 @@ gdk_pixbuf_loader_new (void)
  * cannot parse the buf.
  **/
 gboolean
-gdk_pixbuf_loader_write (GdkPixbufLoader *loader, gchar *buf, gint count)
+gdk_pixbuf_loader_write (GdkPixbufLoader *loader, guchar *buf, size_t count)
 {
        GdkPixbufLoaderPrivate *priv;
 
@@ -230,54 +256,59 @@ gdk_pixbuf_loader_write (GdkPixbufLoader *loader, gchar *buf, gint count)
        if (priv->image_module == NULL) {
                gboolean retval = TRUE;
 
-               g_print ("buf_offset:%d:\n", priv->buf_offset);
                memcpy (priv->buf + priv->buf_offset,
                        buf,
-                       (priv->buf_offset + count) > 128 ? 128 - priv->buf_offset : count);
-               if ((priv->buf_offset + count) >= 128) {
+                       (priv->buf_offset + count > 128) ? (128 - priv->buf_offset) : count);
+
+               if (priv->buf_offset + count >= 128) {
                        /* We have enough data to start doing something with the image */
                        priv->image_module = gdk_pixbuf_get_module (priv->buf, 128);
-                       if (priv->image_module == NULL) {
+                       if (priv->image_module == NULL)
                                return FALSE;
-                       } else if ((priv->image_module->begin_load == NULL) ||
-                                  (priv->image_module->stop_load == NULL) ||
-                                  (priv->image_module->load_increment == NULL)) {
-                               g_warning ("module %s does not support incremental loading.\n", priv->image_module->module_name);
+                       else if ((priv->image_module->begin_load == NULL) ||
+                                (priv->image_module->stop_load == NULL) ||
+                                (priv->image_module->load_increment == NULL)) {
+                               g_warning ("module %s does not support incremental loading.\n",
+                                          priv->image_module->module_name);
                                return FALSE;
                        } else {
-                               g_print ("module loaded: name is %s\n", priv->image_module->module_name);
-                               priv->context = (priv->image_module->begin_load) (gdk_pixbuf_loader_prepare, loader);
+                               priv->context = (*priv->image_module->begin_load) (
+                                       gdk_pixbuf_loader_prepare, loader);
 
                                 if (priv->context == NULL) {
                                         g_warning("Failed to begin progressive load");
                                         return FALSE;
                                 }
                                 
-                               retval = (priv->image_module->load_increment) (priv->context, priv->buf, 128);
+                               retval = (* priv->image_module->load_increment) (
+                                       priv->context, priv->buf, 128);
+
+                               /* if we had more then 128 bytes total, we want
+                                * to send the rest of the buffer.
+                                */
 
-                               /* if we had more then 128 bytes total, we want to send the rest of the buffer */
                                if (retval && (priv->buf_offset + count) >= 128) {
-                                       retval = (priv->image_module->load_increment) (priv->context,
-                                                                                      buf,
-                                                                                      count + priv->buf_offset - 128);
+                                       retval = (* priv->image_module->load_increment) (
+                                               priv->context,
+                                               buf,
+                                               count + priv->buf_offset - 128);
                                }
                        }
-               } else {
+               } else
                        priv->buf_offset += count;
-               }
+
                return retval;
        }
 
        if (priv->image_module->load_increment)
-               return (priv->image_module->load_increment) (priv->context,
-                                                            buf,
-                                                            count);
+               return (* priv->image_module->load_increment) (priv->context, buf, count);
+
        return (FALSE);
 }
 
 /**
  * gdk_pixbuf_loader_get_pixbuf:
- * @loader: A loader.
+ * @loader: A pixbuf loader.
  *
  * Gets the GdkPixbuf that the loader is currently loading.  If the loader
  * hasn't been enough data via gdk_pixbuf_loader_write, then NULL is returned.
@@ -295,6 +326,7 @@ gdk_pixbuf_loader_get_pixbuf (GdkPixbufLoader *loader)
 
        g_return_val_if_fail (loader != NULL, NULL);
        g_return_val_if_fail (GDK_IS_PIXBUF_LOADER (loader), NULL);
+
        priv = loader->private;
 
        return priv->pixbuf;
@@ -302,10 +334,9 @@ gdk_pixbuf_loader_get_pixbuf (GdkPixbufLoader *loader)
 
 /**
  * gdk_pixbuf_loader_close:
- * @loader: A loader.
- *
- * Tells the loader to stop accepting writes
+ * @loader: A pixbuf loader.
  *
+ * Tells the loader to stop accepting writes.
  **/
 void
 gdk_pixbuf_loader_close (GdkPixbufLoader *loader)
@@ -325,20 +356,21 @@ gdk_pixbuf_loader_close (GdkPixbufLoader *loader)
                priv->image_module = gdk_pixbuf_get_module (priv->buf, priv->buf_offset);
                if (priv->image_module &&
                    ((priv->image_module->begin_load == NULL) ||
-                    (priv->image_module->begin_load == NULL) ||
-                    (priv->image_module->begin_load == NULL) ||
-                    (priv->image_module->begin_load == NULL))) {
-                       g_warning ("module %s does not support incremental loading.\n", priv->image_module->module_name);
+                    (priv->image_module->stop_load == NULL) ||
+                    (priv->image_module->load_increment == NULL))) {
+                       g_warning ("module %s does not support incremental loading.\n",
+                                  priv->image_module->module_name);
                } else if (priv->image_module) {
                        g_print ("module loaded: name is %s\n", priv->image_module->module_name);
-                       priv->context = (priv->image_module->begin_load) (gdk_pixbuf_loader_prepare, loader);
-                       (priv->image_module->load_increment) (priv->context, priv->buf, priv->buf_offset);
+                       priv->context = (* priv->image_module->begin_load) (
+                               gdk_pixbuf_loader_prepare, loader);
+                       (* priv->image_module->load_increment) (priv->context,
+                                                               priv->buf, priv->buf_offset);
                }
        }
 
        if (priv->image_module && priv->image_module->stop_load)
-               (priv->image_module->stop_load) (priv->context);
+               (priv->image_module->stop_load) (priv->context);
 
        priv->closed = TRUE;
 }
-
index 83dd9190634942834d256d52ce6c9999b20f7cf9..3e947ec0549df7f9d14ab8e6f3a414b4e5b3e4da 100644 (file)
@@ -66,11 +66,11 @@ struct _GdkPixbufLoaderClass {
 
 \f
 
-GtkType           gdk_pixbuf_loader_get_type (void);
-GtkObject *gdk_pixbuf_loader_new (void);
-gboolean   gdk_pixbuf_loader_write (GdkPixbufLoader *loader, gchar *buf, gint count);
+GtkType gdk_pixbuf_loader_get_type (void);
+GdkPixbufLoader *gdk_pixbuf_loader_new (void);
+gboolean gdk_pixbuf_loader_write (GdkPixbufLoader *loader, guchar *buf, size_t count);
 GdkPixbuf *gdk_pixbuf_loader_get_pixbuf (GdkPixbufLoader *loader);
-void       gdk_pixbuf_loader_close (GdkPixbufLoader *loader);
+void gdk_pixbuf_loader_close (GdkPixbufLoader *loader);
 
 \f